package org.infodavid.common.scheduler.commands;

import java.io.Serializable;

import org.joda.time.DateTime;

import org.infodavid.common.util.IVisitor;

/**
 * The Interface IScheduledCommand.
 */
public interface IScheduledCommand extends Serializable {

	/**
	 * Gets the processor class.
	 * @return the processor class
	 */
	Class<? extends IVisitor<? extends IScheduledCommand, ? extends Object>> getProcessorClass();

	/**
	 * Sets the processor class.
	 * @param clz the new processor class
	 */
	void setProcessorClass(Class<? extends IVisitor<? extends IScheduledCommand, ? extends Object>> clz);

	/**
	 * Gets the key.
	 * @return the key
	 */
	String getKey();

	/**
	 * Sets the key.
	 * @param value the new key
	 */
	void setKey(String value);

	/**
	 * Gets the expiration date.
	 * @return the expiration date
	 */
	DateTime getExpirationDate();

	/**
	 * Sets the expiration date.
	 * @param value the new expiration date
	 */
	void setExpirationDate(final DateTime value);

	/**
	 * Checks if is recovery enabled.
	 * @return true, if is recovery enabled
	 */
	boolean isRecoveryEnabled();

	/**
	 * Sets the recovery enabled.
	 * @param flag the new recovery enabled
	 */
	void  setRecoveryEnabled(boolean flag);
}
